/**
 * @description user 数据操作
 */

const _ = require('lodash')
const UserModel = require('../model/user')

/**
 * 查找用户信息
 * @param {Object} param0 查询参数
 */
async function findOneUser({ username, password, phoneNumber }) {
  // 拼接查询条件
  const whereOpt = {}
  if (username) {
    Object.assign(whereOpt, { username })
  }
  if (password) {
    // 用户名和密码在一块，因为密码可能重复
    Object.assign(whereOpt, { username, password })
  }
  if (phoneNumber) {
    Object.assign(whereOpt, { phoneNumber })
  }

  // 无查询条件，则返回空
  if (_.isEmpty(whereOpt)) return null

  // 查询
  const result = await UserModel.findOne(whereOpt)
  return result
}

/**
 * 创建用户
 * @param {Object} data 用户信息，要符合 UserModel 的属性
 */
async function createUser(data = {}) {
  const result = await UserModel.create(data)
  return result
}

/**
 * 修改用户信息
 * @param {string} username username
 * @param {object} data 用户信息，要符合 UserModel 的属性
 * @returns {Promise<boolean>} true/false
 */
async function updateUser(username, data = {}) {
  if (!username) return false
  if (_.isEmpty(data)) return false // 没有要修改的
  const result = await UserModel.findOneAndUpdate({ username }, data, { new: true })
  return !!result
}

module.exports = {
  findOneUser,
  createUser,
  updateUser
}
